package com.hc.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
    * 权限表
    */
@ApiModel(value="com-hc-domain-Permission")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "tb_permission")
public class Permission implements Serializable,Comparable<Permission> {
    private static final long serialVersionUID = 4511816738489647837L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value="编号")
    private Integer id;

    /**
     * 权限标题
     */
    @TableField(value = "name")
    @ApiModelProperty(value="权限标题")
    private String name;

    /**
     * 权限关键字
     */
    @TableField(value = "code")
    @ApiModelProperty(value="权限关键字")
    private String code;

    /**
     * 权限所能访问的资源的路径
     */
    @TableField(value = "url")
    @ApiModelProperty(value="权限所能访问的资源的路径")
    private String url;

    /**
     * 权限所对应的图标
     */
    @TableField(value = "icon")
    @ApiModelProperty(value="权限所对应的图标")
    private String icon;

    /**
     * 排序值（默认是50）
     */
    @TableField(value = "level")
    @ApiModelProperty(value="排序值（默认是50）")
    private Integer level;

    /**
     * 是否展开：0关闭  1展开
     */
    @TableField(value = "is_open")
    @ApiModelProperty(value="是否展开：0关闭  1展开")
    private Boolean isOpen;

    /**
     * 备注信息
     */
    @TableField(value = "info")
    @ApiModelProperty(value="备注信息")
    private String info;

    /**
     * 父权限ID，根节点的父权限为空
     */
    @TableField(value = "pid")
    @ApiModelProperty(value="父权限ID，根节点的父权限为空")
    private Integer pid;

    /**
     * 启用状态：0禁用  1启用
     */
    @TableField(value = "status")
    @ApiModelProperty(value="启用状态：0禁用  1启用")
    private Boolean status;

    /**
     * 创建时间
     */
    @TableField(value = "createTime")
    @ApiModelProperty(value="创建时间")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "updateTime")
    @ApiModelProperty(value="更新时间")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 保证从数据库中查询出多个Permission放到SortedSet中时按level降序
     * 一个人可以有多个角色，而这些角色所拥有的权限可能重复，所以放在Set中去重
     * @param o
     * @return
     */
    @Override
    public int compareTo(@NotNull Permission o) {
        return o.getLevel()-this.getLevel();
    }
}
